home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 13 - 1997 (partial) / 13.02 Feb 97 / SerialKiller SN Generator / NameTester.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-22  |  4.9 KB  |  191 lines  |  [TEXT/CWIE]

  1. //////////////////////////////////////////////////
  2. //                                                //
  3. //    NameTester.c                                //
  4. //                                                //
  5. //    © 1996 1 A.M. Productions and J. McCornack    //
  6. //    September 9,1996                            //
  7. //                                                //
  8. //    This demonstrates serial encoding based     //
  9. //    on ASCII values of the user's name.             //
  10. //                                                //
  11. //    This demo compares the user's name and        //
  12. //    registration number from NameNumerator.        //
  13. //                                                //
  14. //////////////////////////////////////////////////
  15.  
  16. #ifndef __MAIN__
  17. #include "NameTester.h"
  18. #endif
  19.  
  20. void main()
  21. {
  22.     InitGraf(&qd.thePort);
  23.     InitFonts();
  24.     FlushEvents(everyEvent,0);
  25.     InitWindows();
  26.     InitMenus();
  27.     TEInit();
  28.     InitDialogs(0L);        
  29.         
  30.     GetNameAndNum();        // Ask the user for a name and serial number
  31.  
  32.     FlushEvents(everyEvent,0);        
  33. }
  34.  
  35. void GetNameAndNum()
  36. {
  37.     short         itemHit, itemType;
  38.     long        i;
  39.     Handle         itemHandle;
  40.     Rect         itemRect;
  41.     Str255        nameStr, nameNum, serialStr;    
  42.     DialogPtr     dialog;
  43.     GrafPtr     oldPort;
  44.     Boolean        gotAMatch;
  45.  
  46.     GetPort(&oldPort);
  47.     dialog=GetNewDialog(131,nil,(WindowPtr)-1);    //131 is NameTester's dialog ID#
  48.     ShowWindow(dialog);
  49.     SelectWindow(dialog);
  50.     SetPort(dialog);
  51.     GetDialogItem(dialog,3,&itemType,&itemHandle,&itemRect);
  52.     SetDialogItemText(itemHandle,"\pyour name here");
  53.     GetDialogItem(dialog,4,&itemType,&itemHandle,&itemRect);
  54.     SetDialogItemText(itemHandle,"\pserial # here");
  55.     
  56.     nameStr[0] = 24;
  57.     nameStr[25] = '\0';
  58.     nameNum[0] = 6;
  59.     nameNum[7] = '\0';
  60.     itemHit=-1;
  61.  
  62.     while (itemHit !=2)
  63.     {
  64.         ModalDialog(StdFilter, &itemHit);
  65.         
  66.         if (itemHit == 2)
  67.         {
  68.             SetPort(oldPort);
  69.             DisposeDialog(dialog);
  70.             ExitToShell();
  71.         }
  72.         if (itemHit == 1)
  73.         {
  74.             for (i=1;i <= 24; i++)
  75.                 nameStr[i] = '\0';
  76.             for (i=1;i <= 6; i++)
  77.                 serialStr[i] = '\0';
  78.             GetDialogItem(dialog,3,&itemType,&itemHandle,&itemRect);
  79.             GetDialogItemText(itemHandle,nameStr);
  80.             GetValue(nameStr, nameNum);
  81.             GetDialogItem(dialog,4,&itemType,&itemHandle,&itemRect);
  82.             GetDialogItemText(itemHandle,serialStr);
  83.             if (GoodName(nameStr) == false)
  84.             {
  85.                 GetDialogItem(dialog,5,&itemType,&itemHandle,&itemRect);
  86.                 SetDialogItemText(itemHandle,"\pUse a real name");
  87.             }
  88.             else
  89.             {
  90.                 gotAMatch = true;
  91.                 for (i=1;i <= 6; i++)
  92.                     if (nameNum[i] != serialStr[i])
  93.                         gotAMatch = false;
  94.                 if (gotAMatch)
  95.                 {
  96.                     GetDialogItem(dialog,5,&itemType,&itemHandle,&itemRect);
  97.                     SetDialogItemText(itemHandle,"\pGood! Play in peace.");
  98.                     SysBeep(1);
  99.                 }
  100.                 else
  101.                 {
  102.                     GetDialogItem(dialog,5,&itemType,&itemHandle,&itemRect);
  103.                     SetDialogItemText(itemHandle,"\pNo good. Oh well…");
  104.                 }
  105.             }
  106.         }
  107.     }
  108. }
  109.  
  110. pascal Boolean StdFilter(DialogPtr theDialog, EventRecord *theEvent, short *itemHit)
  111. {
  112.     char theChar;
  113.     short itemKind;
  114.     Handle itemHandle;
  115.     Rect itemBox;
  116.  
  117.     switch ( theEvent->what )
  118.     {
  119.     case keyDown: 
  120.         theChar = (char)(theEvent->message & charCodeMask);
  121.         if ( (((theEvent->modifiers & cmdKey) != 0) && (theChar == '.')) || (theChar == (char)27) ) /*cmd-. or ESC*/
  122.         {
  123.             *itemHit = kCancelButton;
  124.             GetDItem(theDialog, kCancelButton, &itemKind, &itemHandle, &itemBox);
  125.             HiliteControl((ControlHandle)itemHandle, 1);
  126.             return true;
  127.         }
  128.         if ( (theChar == (char)13) || (theChar == (char)3) )
  129.         {
  130.             *itemHit = kOKButton;
  131.             GetDItem(theDialog, 1, &itemKind, &itemHandle, &itemBox);
  132.             HiliteControl((ControlHandle)itemHandle, kOKButton);
  133.             return true;
  134.         }
  135.         break;
  136.     case updateEvt:
  137.         BeginUpdate(theDialog);
  138.         SetPort(theDialog);
  139.         DrawDialog(theDialog);
  140.         GetDItem(theDialog, kOKButton, &itemKind, &itemHandle, &itemBox);
  141.         InsetRect(&itemBox, -4, -4);
  142.         PenSize(3, 3);
  143.         FrameRoundRect(&itemBox, 15, 15);
  144.         EndUpdate(theDialog);
  145.         break;
  146.     }
  147.     return false;
  148. }
  149.  
  150.  
  151. void GetValue(Str255 valStr, Str255 retStr)
  152. {
  153.     long    i;
  154.     
  155.     for (i=1; i <= 6; i++)            //Load first six character codes
  156.         retStr[i] = (valStr[i] % 10) + '0';
  157.     for (i=1; i <= 6; i++)            //Load next six character codes (7 through 12)
  158.         retStr[i] = ((retStr[i] - '0' + valStr[i+6]) % 10) + '0';
  159.     for (i=1; i <= 6; i++)            //Load third six character codes (13 through 18)
  160.         retStr[i] = ((retStr[i] - '0' + valStr[i+12]) % 10) + '0';
  161.     for (i=1; i <= 6; i++)            //Load first six character codes (19 through 24)
  162.         retStr[i] = ((retStr[i] - '0' + valStr[i+18]) % 10) + '0';
  163.         
  164.     retStr[1] = ((retStr[1] - '0' + 2) % 10) + '0';    //Add 257458 (kinda…)
  165.     retStr[2] = ((retStr[2] - '0' + 5) % 10) + '0';
  166.     retStr[3] = ((retStr[3] - '0' + 7) % 10) + '0';
  167.     retStr[4] = ((retStr[4] - '0' + 4) % 10) + '0';
  168.     retStr[5] = ((retStr[5] - '0' + 5) % 10) + '0';
  169.     retStr[6] = ((retStr[6] - '0' + 8) % 10) + '0';
  170. }
  171.  
  172. Boolean GoodName(Str255 testName)
  173. {
  174.     long    i, valueHolder = 0;
  175.     
  176.     for (i=1; i <= 6; i++)
  177.     {
  178.         valueHolder = testName[i];
  179.         if (valueHolder == 0)        //Verify at least 6 chars were entered.
  180.             return false;
  181.     }
  182.     
  183.     valueHolder = 0;                //Start counting letters at 0
  184.     for (i=1; i <= 10; i++)            
  185.         if ((testName[i] >= 'A') && (testName[i] <= 'z'))
  186.             valueHolder++;            //Verify at least 5 of the first 10 chars…
  187.     if (valueHolder >=5)            //…are letters of the alphabet.
  188.         return true;
  189.     else
  190.         return false;
  191. }